//
// Created by francklinson on 2021/5/26.
//

/*
数组的每个下标作为一个阶梯，第 i 个阶梯对应着一个非负数的体力花费值cost[i]（下标从 0 开始）。

每当你爬上一个阶梯你都要花费对应的体力值，一旦支付了相应的体力值，你就可以选择向上爬一个阶梯或者爬两个阶梯。

请你找出达到楼层顶部的最低花费。在开始时，你可以选择从下标为 0 或 1 的元素作为初始阶梯。



来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/min-cost-climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    int minCostClimbingStairs(vector<int> &cost) {
        vector<int> climber(cost.size() + 1,0);
        for (int i = 2; i < climber.size(); ++i) {
            climber[i] = min(climber[i - 2] + cost[i - 2], climber[i - 1] + cost[i - 1]);
        }
        return climber.back();
    }
};


int main() {
    vector<int> cost{1, 100, 1, 1, 1, 100, 1, 1, 100, 1};
    Solution sol;
    cout << sol.minCostClimbingStairs(cost) << endl;
    return 0;
}
